RISC-V Linux kernel debug 环境搭建
一、目的
搭建qemu-gdb risc-v64 linux kernel的调试环境。
二、准备工作
Build Ninja 和riscv-toolchain
首先安装必要的库(这是编译riscv toolchain必须安装的库文件)
1 | sudo apt update |
Build Ninja
1
2
3
4git clone https://github.com/ninja-build/ninja.git
cd ninja
cmake -Bbuild-cmake
cmake --build build-cmake然后在.bashrc中添加ninja/build-cmake目录
编辑.bashrc如下:1
export PATH=$PATH:/home/kali/Desktop/riscv-debug/ninja/build-cmake
Build riscv-gnu-compiler toolchain and debug gdb
1
2
3wget https://static.dev.sifive.com/dev-tools/freedom-tools/v2020.12/riscv64-unknown-elf-toolchain-10.2. 0-2020.12.8-x86_64-linux-ubuntu14.tar.gz
tar -xzvf riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz
mv riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14 riscv64-unknown-elf-toolchain接着编辑~/.bashrc,加入下面的环境变量:
1
export PATH=$PATH:/home/kali/Desktop/riscv-debug/riscv64-unknown-elf-toolchain/bin
命令行安装gcc-riscv64-linux-gnu-
1
sudo apt install binutils-riscv64-linux-gnu $ sudo apt install gcc-riscv64-linux-gnu
三、Build Qemu
1 | git clone https://github.com/riscv-software-src/opensbi.git |
四、Build opensbi
1 | git clone https://github.com/riscv-software-src/opensbi.git |
五、Build Busybox
1 | wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2 |
在.config中添加这句:
1 | CONFIG_STATIC=y |
添加完成后保存回到busybox-1.35.0目录
1 | make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- -j $(nproc) |
在rcS中添加以下内容:
1 | #!bin/sh |
添加后保存
接着执行下面两条指令,这两条指令需要root权限:
1 | sudo mknod dev/console c 5 1 |
给rcS文件设置可执行属性:
1 | chmod 777 etc/init.d/rcS |
到此busybox操作完成。
六、Build Linux Kernel
1 | wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.9.tar.xz |
在内核Makefile的KBUILD_CFLAGS上添加-g选项,然后再执行下面命令:
1 | make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- defconfig |
以上步骤完成后使用gdb调试qemu启动linux kernel,qemu命令行如下:
1 | qemu-system-riscv64 \ |
开启另一个终端,进入刚刚的linux kernel 目录(该目录下有vmlinux文件),使用下面命令启动gdb:
1 | riscv64-unknown-elf-gdb vmlinux -ex 'target remote localhost:1234' |